home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / PLUS4 / plus4disk2.d64 / ch6.03 search < prev    next >
Text File  |  2009-01-03  |  5KB  |  64 lines

  1. Ç*NB"1:CH6.03  SEARCH"
  2. Ç*SP0:LM8:RM62:PL66:PG59
  3. Ç*VP3:HL8:HR72:HD0:├16/+4: ╙┼┴╥├╚                      ,,╙ECTION XX
  4. Ç*HS2:------------------------------------,,----------
  5. Ç*FT0:-----------------------,,----------
  6. Ç*FS3:(C) 1984 ┼LIZABETH ─EAL,,         Ç#
  7. ╙ECTION
  8. Ç*LN2:CN1;╙┼┴╥├╚╔╬╟Ç*LN2:CN0
  9.      ╫HILE THIS PROGRAM WILL NOT FIND YOUR GLASSES OR A FAVORITE BOOK, IT WILL FIND A SPECIFIC SEQUENCE OF LETTERS IN A PRESORTED LIST, AS IN THIS EXAMPLE:
  10.      
  11. // PIC: SEARCH //
  12.  
  13.      ╙UCH A LIST CAN CONTAIN ANYTHING: LIBRARY CATALOGS, PHONE DIRECTORIES, REVERSE PHONE DIRECTORIES, LISTS OF STUDENT NAMES, LISTS OF PROGRAMS ON YOUR TAPE OR A FLOPPY DISK, AND SO ON.
  14.      
  15.      "╨RESORTED" IS A BUZZWORD MEANING THAT THE ITEMS ARE IN AN ALPHABETICAL OR NUMERIC SEQUENCE. ╘HE LIST NEEDS TO BE IN "ASCENDING ORDER". ╩UST ANOTHER BUZZWORD. ╘HIS ONE MEANS "IN INCREASING ORDER". ╘HAT IS FROM ┴ TO ┌. ╔F YOU KEEP YOUR PHONE LIST IN A ┌ TO ┴ ORDER, YOU WILL HAVE TO RETHINK THE PROGRAM.
  16.      
  17.      ╙UPPOSE WE HAVE A LIST OF FRIENDS, SUPPLIERS OR CUSTOMERS AND THEIR PHONE NUMBERS. ╞OR AN EXAMPLE, SEE THE ─┴╘┴ LINES. ╬OW WE WISH TO FIND THE ╨╠╒═┬┼╥. ╥UN THIS PROGRAM, AND AS AN ANSWER TO THE ╔╬╨╒╘ QUERY OVERTYPE ╨╠╒═┬┼╥. ╘HE PROGRAM DISPLAYS THE INFORMATION RIGHT UNDER YOUR REQUEST FOR ╨╠╒═┬┼╥. ╘O QUIT, PUSH ╥┼╘╒╥╬ OVER THE ASTERISK AFTER THE QUESTION MARK.
  18.      
  19. // PRG: SEARCH //
  20.  
  21. Ç*FP10
  22. ***  ╓┴╥╔┴┬╠┼╙  ***
  23.  
  24. ╥   NUMBER OF RECORDS
  25. ╞   NUMBER OF FIELDS PER RECORD
  26. ╞╠  FIELD NUMBER WE'RE SEARCHING
  27. ╨═  PATTERN-MATCHING FLAG
  28. ╬├  NUMBER OF CHARACTERS TO MATCH
  29. ╞╠  IS THE FIELD NUMBER WE'RE SEARCHING, HERE IT IS NUMBER 1.
  30. ╧╦  FLAG: ZERO IF WE FOUND NOTHING
  31.     MINUS ONE OTHERWISE
  32.  
  33. ***  ╔╬╙╘╥╒├╘╔╧╬╙  ***
  34.  
  35.      ╘HE GRAPHIC CHARACTERS IN THE ╔╬╨╒╘ PROMPT ARE THE SAME AS IN THE SORT PROGRAM.
  36.  
  37.      ┴S THERE ARE ONLY TWO FIELDS IN EACH RECORD, YOU INPUT OPTIONS ARE TO OVERTYPE THE STAR WITH NUMBER 1 OR 2. ╘O STOP THE PROGRAM PRESS ╥┼╘╒╥╬ OVER THE ASTERISK.
  38.  
  39. ***  ─┼╘┴╔╠╙  ***
  40.  
  41.      ╘HE PROGRAM REQUIRES THAT THE LIST TO BE SEARCHED BE IN SORTED ORDER IN THE FIELD YOU PLAN TO EXAMINE. ╬UMBER OF RECORDS (╥) AND FIELDS (╞) IS FIXED IN LINE 140. ╘HIS IS NOT UNREASONABLE, SINCE NORMALLY ONCE YOU BEGIN THE SEARCH, THE SORT ROUTINE HAS TOLD YOU HOW MANY RECORDS THERE ARE. ╔F NOT, IF YOU'RE READING DATA FROM TAPE OR DISK, SLIGHT MODIFICATIONS TO THIS ROUTINE WILL BE NEEDED.
  42.  
  43. ╨═  IS SET TO 1 WHEN THE ╔╬╨╒╘ SAW SEVERAL CHARACTERS FOLLOWED BY ASTERISK. ╔T STANDS FOR "PATTERN MATCHING". ╨═ IS ZERO IF WE DO NOT USE THE STAR.
  44.  
  45. ╬├  IS NUMBER OF CHARACTERS WE MUST MATCH. ╔T IS THE SAME AS INPUT WHEN NO STAR WAS USED. ╔T IS ONE CHARACTER SHORTER IF A STAR WAS USED. ╙EE LINE 180 WHERE THIS IS TAKEN CARE OF. ╔F YOU INPUT NOTHING, I.E. IF YOU PRESS ╥┼╘╒╥╬ OVER THE STAR, WE END THE PROGRAM. ╘HAT, TOO, IS TAKEN CARE OF IN LINE 180.
  46.  
  47. ╧╦  IS A FLAG. ╔F FALSE (ZERO), WE FOUND NOTHING. ╔F TRUE (NON-ZERO, HERE -1), WE FOUND A MATCHING ENTRY!
  48.  
  49.      ╠INE 190 PREPARES THE FINAL SEARCH STRING AND CALLS THE SEARCH SUBROUTINE. (╔T IS A SEPARABLE HUNK OF CODE, SINCE IT CAN BE USED FOR MANY APPLICATIONS. ╙O EVEN THOUGH IT INVOLVES SOME SETUP, THE TIME WASTED ON THE SETUP IS MINIMAL COMPARED TO YOUR TIME IN REWRITING IT FOR EVERY USE). ╧N RETURN, IF NOTHING WAS FOUND, WE SAY SO IN LINE 200. ╧THERWISE WE DISPLAY THE RECORD.
  50.  
  51.      ╘HE SEARCH SUBROUTINE IN LINES 7000-7050 IS A FAIRLY QUICK WAY TO SEARCH. ╔T IS RELATED TO A SO CALLED BINARY-CHOP METHOD, WHERE A SORTED LIST IS SPLIT IN HALF (LINE 7010) IN SUCCESSIVE STEPS SO AS TO MINIMIZE THE NUMBER OF COMPARISONS. ╫HEN WE GET CLOSE TO BEING RIGHT WE ADJUST THE INTERVAL SIZE IN TINY STEPS UNTIL A MATCH IS FOUND. ╫E THEN MAKE VARIABLE ╧╦ "TRUE", THAT IS -1. ╧THERWISE, IF OUR UPPER AND LOWER LIMITS (╒╠ AND ╠╠) HAVE MET, WE'VE RUN OUT OF DATA, ╧╦ REMAINS "FALSE" (0) AND WE RETURN.
  52.  
  53.      ╘HE PROCEDURE IS ANALOGOUS TO THE WAY MOST PEOPLE LOOK FOR INFORMATION IN AN ENCYCLOPEDIA OR A PHONE BOOK. ╔F WE'RE LOOKING FOR "╦┼╬╬┼╠" WE'RE UNLIKELY TO BEGIN THE SEARCH WITH THE ┴ ENTRIES. ╫E SPLIT THE BOOK, MORE OR LESS, IN HALF. ╔F THE LETTER IS ═, WE SPLIT THE LOWER PART IN HALF AGAIN, PERHAPS ENDING UP WITH THE ╟ ENTRIES. ╬O NEED TO GO BEYOND EITHER ═ OR ╟. ╫E CAN FIND ╦ FAIRLY EASILY, ONCE THE RANGE HAS BEEN NARROWED DOWN. ╘HIS ROUTINE DOES AN IDENTICAL THING WITH ONE, PROFOUND, EXCEPTION: THE COMPUTER DIVIDES THE INTERVALS EXACTLY IN HALF, NONE OF THAT SLOPPY HUMAN WORK!
  54.  
  55. ***  ╨╥╧╩┼├╘╙  ***
  56.  
  57.      ╘RY SOME VARIATIONS OF THE INPUT: FIRST SEE WHAT HAPPENS IF YOU ASK FOR ┴╔╥ ├╧╬─╔╘╔╧╬╔╬╟. ╙ECONDLY, ENTER JUST A FEW SIGNIFICANT LETTERS, SUCH AS ╨╠* (THE ASTERISK AT THE END MEANS "DON'T CARE WHAT FOLLOWS"). ╚OW MANY SIGNIFICANT LETTERS WILL YOU HAVE TO PUT IN TO GET ├┴╥╨╧╧╠ RATHER THAN ├┴╥╨┼╬╘┼╥?
  58.  
  59.      ┴SK THE COMPUTER TO TELL US ALL ENTRIES THAT BEGIN WITH A ├ BUT AREN'T A ├┴╥╨╧╧╠? ├AN YOU THINK OF REASONS FOR DOING THAT?
  60.  
  61.      ╥EWRITE THIS CODE TO MAKE IT GENERAL FOR SEARCHING ANY OTHER FIELD, NOT ONLY NUMBER ONE. ┴GAIN, THINK WHY THIS APPROACH WOULD BE BETTER.
  62.  
  63.      ╘HINK OF A BETTER WAY TO GET THE COUNT OF RECORDS TO THE COMPUTER INSTEAD OF THE CURRENT SETTING OF VARIABLE ╥ TO A SPECIFIC NUMBER.
  64.